<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>circle</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        body {
            overflow: hidden;
            /* background: #e0e0e0; */
        }
        .container {
            font-size: 75px;
        }
        .container,
        .container * {
            position: absolute;
            top: 50%;
            left: 50%;
        }
        .ball {
            width: 0;
            height: 0;
            color: #222;
            border: 0.75em solid;
            border-radius: 50%;
        }
        @keyframes ball0 {
            from {
                transform: translate(-50%, -50%) rotate(45deg) translateY(-1.41421em) rotate(0deg);
            }
            50% {
                transform: translate(-50%, -50%) rotate(135deg) translateY(-1.41421em) rotate(-360deg);
            }
            to {
                transform: translate(-50%, -50%) rotate(45deg) translateY(-1.41421em) rotate(-360deg);
            }
        }
        @keyframes ballBorder0 {
            from {
                border-bottom-color: transparent;
            }
            50%,
            to {
                border-bottom-color: currentColor;
            }
        }
        .ball:nth-child(1) {
            animation: ball0 2.5s cubic-bezier(0.8, 0, 0.58, 1) infinite, ballBorder0 2.5s steps(1) infinite;
        }
        @keyframes ball1 {
            from {
                transform: translate(-50%, -50%) rotate(135deg) translateY(-1.41421em) rotate(0deg);
            }
            50% {
                transform: translate(-50%, -50%) rotate(225deg) translateY(-1.41421em) rotate(-360deg);
            }
            to {
                transform: translate(-50%, -50%) rotate(135deg) translateY(-1.41421em) rotate(-360deg);
            }
        }
        @keyframes ballBorder1 {
            from {
                border-bottom-color: transparent;
            }
            50%,
            to {
                border-bottom-color: currentColor;
            }
        }
        .ball:nth-child(2) {
            animation: ball1 2.5s cubic-bezier(0.8, 0, 0.58, 1) infinite, ballBorder1 2.5s steps(1) infinite;
        }
        @keyframes ball2 {
            from {
                transform: translate(-50%, -50%) rotate(225deg) translateY(-1.41421em) rotate(0deg);
            }
            50% {
                transform: translate(-50%, -50%) rotate(315deg) translateY(-1.41421em) rotate(-360deg);
            }
            to {
                transform: translate(-50%, -50%) rotate(225deg) translateY(-1.41421em) rotate(-360deg);
            }
        }
        @keyframes ballBorder2 {
            from {
                border-bottom-color: transparent;
            }
            50%,
            to {
                border-bottom-color: currentColor;
            }
        }
        .ball:nth-child(3) {
            animation: ball2 2.5s cubic-bezier(0.8, 0, 0.58, 1) infinite, ballBorder2 2.5s steps(1) infinite;
        }
        @keyframes ball3 {
            from {
                transform: translate(-50%, -50%) rotate(315deg) translateY(-1.41421em) rotate(0deg);
            }
            50% {
                transform: translate(-50%, -50%) rotate(405deg) translateY(-1.41421em) rotate(-360deg);
            }
            to {
                transform: translate(-50%, -50%) rotate(315deg) translateY(-1.41421em) rotate(-360deg);
            }
        }
        @keyframes ballBorder3 {
            from {
                border-bottom-color: transparent;
            }
            50%,
            to {
                border-bottom-color: currentColor;
            }
        }
        .ball:nth-child(4) {
            animation: ball3 2.5s cubic-bezier(0.8, 0, 0.58, 1) infinite, ballBorder3 2.5s steps(1) infinite;
        }
        .square {
            width: 2em;
            height: 2em;
            background: #e0e0e0;
            animation: square 2.5s cubic-bezier(0.8, 0, 0.58, 1) infinite;
        }
        @keyframes square {
            from, 50% {
                visibility: hidden;
                transform: translate(-50%, -50%) rotate(0deg);
            }
            100% {
                visibility: visible;
                transform: translate(-50%, -50%) rotate(90deg);
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="ball"></div>
        <div class="ball"></div>
        <div class="ball"></div>
        <div class="ball"></div>
        <div class="square"></div>
    </div>
</body>
</html>